package com.springboot.study.entity;
// jakarta.validation.constraints.Email 用于校验邮箱格式
import jakarta.validation.constraints.Email;

// lombok 注解，自动生成 getter/setter、无参构造器、全参构造器等
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import org.springframework.boot.context.properties.ConfigurationProperties; // 用于绑定配置文件属性
import org.springframework.stereotype.Component; // 标记为 Spring 容器管理的 Bean
import org.springframework.validation.annotation.Validated; // 启用 Spring 的校验功能

/**
 * PersonMan 类，用于绑定配置文件中以 "personman" 开头的属性
 * 通过 @Component 使其成为 Spring 管理的 Bean
 * 通过 @ConfigurationProperties(prefix = "personman") 绑定配置属性
 * 通过 @Validated 开启对绑定属性的校验支持
 *
 * 说明：
 *      @Data、@NoArgsConstructor、@AllArgsConstructor 都是 Lombok 注解，简化代码编写。
 *      @Component 让 Spring 容器扫描到这个类并创建 Bean。
 *      @ConfigurationProperties(prefix = "personman") 将配置文件中 personman.* 属性自动注入到该类字段。
 *      @Validated 启用属性校验功能，校验注解如 @Email 会生效。
 * 配置文件示例：
 * personman:
 *   email: example@example.com
 *如果绑定的 email 不是合法邮箱格式，启动时会报错提醒。
 */
@Data // Lombok 注解，自动生成所有字段的 getter/setter、toString、equals 和 hashCode
@NoArgsConstructor // Lombok 注解，自动生成无参构造器
@AllArgsConstructor // Lombok 注解，自动生成全参构造器
@Component // 声明为 Spring 管理的 Bean
@ConfigurationProperties(prefix = "personman") // 绑定配置文件中以 "personman" 开头的属性
@Validated // 开启对绑定属性的校验功能
public class PersonMan {

    // 定义 email 属性，使用 @Email 注解进行格式校验
    // 如果配置文件中 personman.email 不是合法邮箱格式，绑定时会报校验错误
    @Email(message = "邮箱格式错误")
    private String email;

}
